package com.wl.center.task.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wl.center.common.result.Result;
import com.wl.center.model.task.*;

import com.wl.center.task.service.*;
import com.wl.center.vo.task.CustomerInfo;
import com.wl.center.vo.task.CustomerRecord;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;

import java.util.ArrayList;
import java.util.List;

@RestController
@CrossOrigin
@Api(tags="任务查看")
@RequestMapping("/task")
public class TaskController {
    //注入service
    @Autowired
    private CustomerService customerService;
    @Autowired
    private CustomerInfoService customerInfoService;
    @Autowired
    private CustomerRecordService customerRecordService;

    // TODO: 2023/3/7 一次传9页
    // TODO: 2023/3/7 数据降序排列
    // TODO: 2023/3/7 按需求取数据，属性
    // TODO: 2023/3/7 1.接口文档  2.先确定一个方法
    //1.根据sellerId获取经理分配的客户  主界面加载时，分页查询所有客户信息
    // Todo 根据sellerId获取经理分配的客户，这里的sellerId应该是集合类型
    @ApiOperation(value = "分页查询所有客户信息")
    @GetMapping("/get/page/{sellerId}/{currentPage}/{rows}")
    public Result getCusPage(@PathVariable long currentPage,
                               @PathVariable long rows,
                               @PathVariable Integer sellerId
                                 ) {
        //创建page对象，传递当前页，每页记录数
        Page<Customer> page = new Page<>(currentPage,rows);
        //构建条件，用条件构造器
        QueryWrapper<Customer> wrapper = new QueryWrapper<>();
        if(!StringUtils.isEmpty(sellerId)) {
            wrapper.eq("seller_id",sellerId);
        }
        wrapper.orderByAsc("createTime");//将查询到的数据按创建时间的由早到晚排列，升序
        IPage<CustomerInfo> page1 = customerInfoService.getCustomerInfoPage(page, wrapper);
        //返回结果
        return Result.ok(page1);
    }
    //2.点击查看不同状态客户(status为1.全部客户;2.已完成客户;3.进行中客户;4.新客户)
    @ApiOperation(value = "点击查看不同状态客户")
    @GetMapping("/get/by-flag/{sellerId}/{currentPage}/{rows}/{flag}")
    public Result getCusByFlags(@PathVariable long currentPage,
                                 @PathVariable long rows,
                                 @PathVariable Integer sellerId,
                                 @PathVariable Integer flag
    ){
        //创建page对象，传递当前页，每页记录数
        Page<Customer> page = new Page<>(currentPage,rows);
        //构建条件，用条件构造器
        QueryWrapper<Customer> wrapper = new QueryWrapper<>();
        //根据status的值来查看不同客户 status为1.全部客户;2.已完成客户;3.进行中客户;4.新客户
        if(!StringUtils.isEmpty(sellerId)) {//1.查看全部客户
            wrapper.eq("seller_id",sellerId);
            wrapper.eq("level_id",2);//2 有效
        }
        wrapper.orderByAsc("createTime");//将查询到的数据按创建时间的由早到晚排列，升序

        if(flag==2){//2.查看已完成客户
            wrapper.eq("money_status",0);//0 已付定金
            wrapper.eq("sign_status",0);//0 已签约
        }
        if(flag==3){//3.查看进行中客户
            wrapper.eq("sign_status",2);//2  未发起
            wrapper.eq("enroll_status",0);//0 已报名

        }
        if(flag==4){//4.查看新客户
            wrapper.eq("sign_status",2);//2  未发起
            wrapper.eq("enroll_status",1);//1 未报名
            wrapper.eq("money_status",1);//1 未付定金
        }
        IPage<CustomerInfo> page1 = customerInfoService.getCustomerInfoPage(page, wrapper);
        //返回结果
        return Result.ok(page1);
    }

    //3 根据id获取客户信息
    @ApiOperation(value = "查看客户信息")
    @GetMapping("/get/customer/{customerId}")
    public Result getCusById(@PathVariable Long customerId) {
        //构建条件
        QueryWrapper<Customer> wrapper = new QueryWrapper<>();
        wrapper.eq("id",customerId);//根据id获取客户信息
        CustomerRecord customerRecord = customerRecordService.getCustomerRecord(customerId, wrapper);
        return Result.ok(customerRecord);
    }
    //4.根据姓名查找客户——测试成功
    @ApiOperation(value = "根据姓名查找客户")
    @GetMapping("/get/{sellerId}/{name}")
    public Result getQueryName(@PathVariable Integer sellerId,
                               @PathVariable String name
    ) {
        //构建条件
        QueryWrapper<Customer> wrapper = new QueryWrapper<>();
        if(!StringUtils.isEmpty(name)&&!StringUtils.isEmpty(sellerId)) {
            wrapper.eq("seller_id",sellerId);
            wrapper.like("name",name);
        }
        List<CustomerInfo> customerInfoList = customerInfoService.getCustomerInfo(wrapper);
        //返回结果
        return Result.ok(customerInfoList);
    }
    //5.0  编辑客户信息之前先根据客户id查询客户的信息  customer
    @ApiOperation(value = "根据客户id查询客户的customer信息")
    @GetMapping("/query/customer/{id}")
    public Result getCustomerById(@PathVariable Long id) {
        //构建条件
        Customer customer = customerService.getcustomerById(id);
        return Result.ok(customer);
    }
    //5.编辑客户信息
    // TODO: 2023/3/7 根据下拉框修改 ——只要把编号和其对应的内容都传给前端后，前端就可以实现选择内容后传对应的编号过来
    @ApiOperation(value = "编辑客户信息")
    @PostMapping("/modify")
    public Result modifyCustomer(@RequestBody Customer customer) {
        boolean flag =  customerService.updateById(customer);
        if(flag) {
            return Result.ok();
        } else {
            return Result.fail();
        }
    }


    //6 统计我的待办
    @ApiOperation(value = "统计我的待办")
    @GetMapping("/count/new/{sellerId}")
    public Result countNew( @PathVariable Integer sellerId){
        QueryWrapper<Customer> wrapper = new QueryWrapper<>();
        wrapper.eq("sign_status",1);//1  未签约
        wrapper.eq("enroll_status",1);//1 未报名
        wrapper.eq("money_status",1);//1 未付定金
        wrapper.eq("seller_id",sellerId);//经理分配的客户
        int count = customerService.count(wrapper);
        return Result.ok(count);
    }
    //7 统计完成任务数-没有客户签约的时间记录，所以不能统计某一时间端的客户总数
    @ApiOperation(value = "统计完成任务数")
    @GetMapping("/count/completed/{sellerId}")
    public Result countCompleted( @PathVariable Integer sellerId){
        QueryWrapper<Customer> wrapper = new QueryWrapper<>();
        wrapper.eq("sign_status",0);//0  已签约
        wrapper.eq("enroll_status",0);//0 已报名
        wrapper.eq("money_status",0);//0 已付定金
        wrapper.eq("status",1);//1 有效状态
        wrapper.eq("seller_id",sellerId);//经理分配的客户
        int count = customerService.count(wrapper);
        return Result.ok(count);
    }
    //8 下拉显示可选国家
    @ApiOperation(value = "下拉显示可选国家")
    @GetMapping("/get/country")
    //public List<Country> getCountry(){
    public Result getCountry(){
        List<Country> countryList = customerRecordService.getCountry();
        return Result.ok(countryList);
    }
    //9 下拉显示可选报名项目
    @ApiOperation(value = "下拉显示可选报名项目")
    @GetMapping("/get/project")
    public  Result getProject(){
        List<Project> projectList = customerRecordService.getProject();
        return Result.ok(projectList);
    }
    //10 下拉显示可选代理商
    @ApiOperation(value = "下拉显示可选代理商")
    @GetMapping("/get/agent")
    public Result getAgent(){
        List<Agent> agentList = customerRecordService.getAgent();
        return Result.ok(agentList);
    }
    //11 下拉显示可选客户类别
    @ApiOperation(value = "下拉显示可选客户类别")
    @GetMapping("/get/type")
    public Result getType(){
        List<Type> typeList = customerRecordService.getType();
        return Result.ok(typeList);
    }
    //12.本地测试接口
    @ApiOperation(value = "下拉显示可选客户类别")
    @GetMapping("/test")
    public Result test(){

        return Result.ok("测试接口");
    }
}

